╬πδαΓδσφΦσ

╨α±≥≡εΓ√σ Φτεß≡αµσφΦ 
╟απ≡≤τΩα Φ ≡Φ±εΓαφΦσ
╩δα±± Image
╬µΦΣαφΦσ ταπ≡≤τΩΦ
┬ΦΣσε
└∩δσ≥ CDRotation

    └∩δσ≥ CDRotation

    ┬ ²≥ε∞ ≡ατΣσδσ ∞√ ≡α±±Ωαµσ∞ εß α∩δσ≥σ CDRotation, Γ εΩφσ Ωε≥ε≡επε Γ≡α∙ασ≥±  Ωε∞∩αΩ≥-ΣΦ±Ω.

    ┬ δσΓε∞ Γσ≡⌡φσ∞ ≤πδ≤ ΩαµΣεπε ΩαΣ≡α ε≥εß≡αµασ≥±  σπε ∩ε≡ ΣΩεΓ√Θ φε∞σ≡ (≡Φ±. 1). ▌≥ε≥ φε∞σ≡ φσ φα≡Φ±εΓαφ Γ ⌠αΘδα⌡ ΩαΣ≡εΓ, α φαΣ∩Φ±√Γασ≥±  ∩≡ΦδεµσφΦσ∞ ∩ε±δσ ≡Φ±εΓαφΦ  ε≈σ≡σΣφεπε ΩαΣ≡α. ╥αΩεσ φσΓετ∞εµφε, σ±δΦ ≡α±∩εδαπα≥ⁿ Γ ΣεΩ≤∞σφ≥σ HTML ⌠αΘδ AVI ΦδΦ ∞φεπε±σΩ÷Φεφφ√Θ ⌠αΘδ GIF.

    pic01.gif (3268 bytes)

    ╨Φ±. 1. ╚τεß≡αµσφΦσ Γ≡α∙α■∙σπε±  Ωε∞∩αΩ≥-ΣΦ±Ωα Γ εΩφσ α∩δσ≥α CDRotation

    ╚±⌡εΣφ√σ ≥σΩ±≥√ ∩≡ΦδεµσφΦ 

    ├δαΓφ√Θ ⌠αΘδ Φ±⌡εΣφ√⌡ ≥σΩ±≥εΓ ∩≡ΦδεµσφΦ  CDRotation ∩≡σΣ±≥αΓδσφ Γ δΦ±≥Φφπσ 1.

    ╦Φ±≥Φφπ 1. ╘αΘδ CDRotation.java

    import java.applet.*;
    import java.awt.*;
    public class CDRotation extends Applet
      implements Runnable
    {
      Thread m_CDRotation = null;
      private Graphics m_Graphics;
      private Image m_Images[];
      private int m_nCurrImage;
      private int m_nImgWidth  = 0;
      private int m_nImgHeight = 0;
      private boolean m_fAllLoaded = false;
      private final int NUM_IMAGES = 11;
      public String getAppletInfo()
      {
        return "Name: CDRotation";
      }
      private void displayImage(Graphics g)
      {
        if (!m_fAllLoaded)
          return;
        g.drawImage(m_Images[m_nCurrImage],
           (size().width - m_nImgWidth)   / 2,
           (size().height - m_nImgHeight) / 2,
            null);
        g.drawString(
          (new Integer(m_nCurrImage)).toString(),
          (size().width - m_nImgWidth)  /2,
         ((size().height - m_nImgHeight)/2)+
         10);
      }
      public void paint(Graphics g)
      {
        Dimension dimAppWndDimension = size();
        g.setColor(Color.white);
        g.fillRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
        g.setColor(Color.black);
        g.drawRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
        if (m_fAllLoaded)
        {
          displayImage(g);
        }		
        else
          g.drawString("Please, wait...", 
            10, dimAppWndDimension.height / 2);
      }
      public void start()
      {
        if (m_CDRotation == null)
        {
          m_CDRotation = new Thread(this);
          m_CDRotation.start();
        }
      }	
      public void stop()
      {
        if (m_CDRotation != null)
        {
          m_CDRotation.stop();
          m_CDRotation = null;
        }
      }
      public void run()
      {
        m_nCurrImage = 0;
        if (!m_fAllLoaded)
        {
          repaint();
          m_Graphics = getGraphics();
          m_Images   = new Image[NUM_IMAGES];
          MediaTracker tracker =
             new MediaTracker(this);
          String strImage;
          for (int i = 0; i < NUM_IMAGES; i++)
          {
            strImage = "images/cdimg0" + 
              ((i < 10) ? "0" : "") + i + ".gif";
            m_Images[i] = getImage(
              getDocumentBase(), strImage);
            tracker.addImage(m_Images[i], 0);
          }
          try
          {
    	tracker.waitForAll();
    	m_fAllLoaded = !tracker.isErrorAny();
          }
          catch (InterruptedException e)
          {
          }	
          if (!m_fAllLoaded)
          {
            stop();
            m_Graphics.drawString(
              "Load error", 10,
               size().height / 2);			  
            return;
          }
          m_nImgWidth  = 
            m_Images[0].getWidth(this);
          m_nImgHeight =
             m_Images[0].getHeight(this);
        }	
        repaint();
        while (true)
        {
          try
          {
            displayImage(m_Graphics);
    	m_nCurrImage++;
    	if(m_nCurrImage == NUM_IMAGES)
    	m_nCurrImage = 0;
            Thread.sleep(30);
          }
          catch (InterruptedException e)
          {
    	stop();
          }
        }
      }
    }

    ╦Φ±≥Φφπ 2 ±εΣσ≡µΦ≥ Φ±⌡εΣφ√Θ ≥σΩ±≥ ΣεΩ≤∞σφ≥α HTML, ±ετΣαφφεπε Σδ  α∩δσ≥α CDRotation.

    ╦Φ±≥Φφπ 2. ╘αΘδ CDRotation.tmp.html

    <applet name="CDRotation"
      code="CDRotation" 
      codebase=
    "file:/e:/sun/articles/vol13/src/CDRotation"
      width="500"
      height="600"
      align="Top"
      alt="If you had a java-enabled browser,
     you would see an applet here.">
    </applet>

    ╬∩Φ±αφΦσ Φ±⌡εΣφ√⌡ ≥σΩ±≥εΓ

    ╨α±±∞ε≥≡Φ∞ φαΦßεδσσ Γαµφ√σ ∞σ≥εΣ√ φα°σπε α∩δσ≥α.

    ╠σ≥εΣ start

    ┬ ταΣα≈≤ ∞σ≥εΣα start, Ωε≥ε≡√Θ ∩εδ≤≈ασ≥ ≤∩≡αΓδσφΦσ ∩≡Φ ε≥εß≡αµσφΦΦ εΩφα α∩δσ≥α, Γ⌡εΣΦ≥ ±ετΣαφΦσ Φ τα∩≤±Ω ∩ε≥εΩα, ε≥εß≡αµα■∙σπε ΩαΣ≡√ ΓΦΣσε⌠Φδⁿ∞α ± Φτεß≡αµσφΦσ∞ Γ≡α∙α■∙σπε±  Ωε∞∩αΩ≥-ΣΦ±Ωα:

    if (m_CDRotation == null)
    {
      m_CDRotation = new Thread(this);
      m_CDRotation.start();
    }

    ╧ε≥εΩ ±ετΣασ≥±  ΩαΩ εß·σΩ≥ Ωδα±±α Thread, ∩≡Φ≈σ∞ Ωεφ±≥≡≤Ω≥ε≡≤ ∩σ≡σΣασ≥±  ±±√δΩα φα πδαΓφ√Θ Ωδα±± α∩δσ≥α. ╧ε²≥ε∞≤ ∩≡Φ τα∩≤±Ωσ ∩ε≥εΩα ≤∩≡αΓδσφΦσ ∩εδ≤≈Φ≥ ∞σ≥εΣ run, ε∩≡σΣσδσφφ√Θ Γ Ωδα±±σ α∩δσ≥α.

    ╠σ≥εΣ stop

    ╠σ≥εΣ stop ε±≥αφαΓδΦΓασ≥ ≡αßε≥≤ ∩ε≥εΩα, ΩεπΣα εΩφε α∩δσ≥α Φ±≈στασ≥ ± ²Ω≡αφα:

    if(m_CDRotation != null)
    {
      m_CDRotation.stop();
      m_CDRotation = null;
    }

    ─δ  ε±≥αφεΓΩΦ Γ√τ√Γασ≥±  ∞σ≥εΣ stop.

    ╠σ≥εΣ paint

    ╤≡ατ≤ ∩ε±δσ ∩εδ≤≈σφΦ  ≤∩≡αΓδσφΦ , ∞σ≥εΣ paint ταΩ≡α°ΦΓασ≥ εΩφε α∩δσ≥α ßσδ√∞ ÷Γσ≥ε∞ Φ ≡Φ±≤σ≥ ΓεΩ≡≤π φσπε ≈σ≡φ≤■ ≡α∞Ω≤.

    ╟α≥σ∞ ∞σ≥εΣ ∩≡εΓσ≡ σ≥ ±εΣσ≡µΦ∞εσ ⌠δαπα m_fAllLoaded. ▌≥ε≥ ⌠δαπ ≤±≥αφεΓδσφ Γ τφα≈σφΦσ true, ΩεπΣα Γ±σ ΩαΣ≡√ ΓΦΣσε⌠Φδⁿ∞α ταπ≡≤µσφ√ Φ ±ß≡ε°σφ Γ τφα≈σφΦσ false, ΩεπΣα ταπ≡≤τΩα ΩαΣ≡εΓ σ∙σ φσ ταΓσ≡°σφα. ╧ε±δσΣφ   ±Φ≥≤α÷Φ  ΓετφΦΩασ≥ Γ±σπΣα ∩≡Φ ∩σ≡Γε∞ Γ√τεΓσ ∞σ≥εΣα paint.

    ┼±δΦ Γ±σ Φτεß≡αµσφΦ  ταπ≡≤µσφ√, ∞σ≥εΣ paint Γ√τ√Γασ≥ ∞σ≥εΣ displayImage, ε∩≡σΣσδσφφ√Θ Γ φα°σ∞ ∩≡ΦδεµσφΦΦ:

    if(m_fAllLoaded)
    {
      displayImage(g);
    }

    ▌≥ε≥ ∞σ≥εΣ, ε Ωε≥ε≡ε∞ ∞√ σ∙σ ≡α±±Ωαµσ∞ ∩εΣ≡εßφσσ, ε≥εß≡αµασ≥ Γ εΩφσ α∩δσ≥α ≥σΩ≤∙ΦΘ ΩαΣ≡ ΓΦΣσε⌠Φδⁿ∞α.

    ┼±δΦ µσ ΩαΣ≡√ ΓΦΣσε⌠Φδⁿ∞α σ∙σ φσ ταπ≡≤µσφ√, Γ εΩφσ α∩δσ≥α ε≥εß≡αµασ≥±  ±εε≥Γσ≥±≥Γ≤■∙σσ ±εεß∙σφΦσ:

    else
      g.drawString("Please, wait...", 
        10, dimAppWndDimension.height / 2);

    ╠σ≥εΣ run

    ╠σ≥εΣ run ≡αßε≥ασ≥ Γ ≡α∞Ωα⌡ ε≥Σσδⁿφεπε ∩ε≥εΩα. ╬φ ταφΦ∞ασ≥±  ∩ε±δσΣεΓα≥σδⁿφ√∞ ≡Φ±εΓαφΦσ∞ ΩαΣ≡εΓ φα°σπε ΓΦΣσε⌠Φδⁿ∞α.

    ╧≡σµΣσ Γ±σπε ∞σ≥εΣ run τα∩Φ±√Γασ≥ φ≤δσΓεσ τφα≈σφΦσ Γ ∩εδσ m_nCurrImage, ⌡≡αφ ∙σσ φε∞σ≡ ≥σΩ≤∙σπε ε≥εß≡αµασ∞επε ΩαΣ≡α:

    m_nCurrImage = 0;

    ─αδσσ Γ√∩εδφ σ≥±  ∩≡εΓσ≡Ωα, ταπ≡≤µσφ√ δΦ Γ±σ ΩαΣ≡√ ΓΦΣσε⌠Φδⁿ∞α, Σδ  ≈σπε αφαδΦτΦ≡≤σ≥±  ±εΣσ≡µΦ∞εσ ⌠δαπα m_fAllLoaded.

    ┼±δΦ Φτεß≡αµσφΦ  φσ ταπ≡≤µσφ√ (α Γ ±α∞ε∞ φα≈αδσ ≥αΩ εφε Φ σ±≥ⁿ) ∞σ≥εΣ run ∩σ≡σ≡Φ±εΓ√Γασ≥ εΩφε α∩δσ≥α Φ ∩εδ≤≈ασ≥ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ  Σδ  ²≥επε εΩφα. ╟α≥σ∞ ±ετΣασ≥±  ∞α±±ΦΓ εß·σΩ≥εΓ Image Σδ  ⌡≡αφσφΦ  ΩαΣ≡εΓ ΓΦΣσε⌠Φδⁿ∞α:

    m_Images   = new Image[NUM_IMAGES];

    ╠σ≥εΣ run ±ετΣασ≥ ≥αΩµσ εß·σΩ≥ Ωδα±±α MediaTracker Σδ  εµΦΣαφΦ  ταπ≡≤τΩΦ Γ±σ⌡ ΩαΣ≡εΓ ΓΦΣσε⌠Φδⁿ∞α:

    MediaTracker tracker = 
      new MediaTracker(this);

    ─αδσσ ∞σ≥εΣ run Γ ÷ΦΩδσ ταπ≡≤µασ≥ Φτεß≡αµσφΦ  Φ ΣεßαΓδ σ≥ Φ⌡ Γ εß·σΩ≥ Ωδα±±α MediaTracker Σδ  ≥επε ≈≥εß√ ∞εµφε ß√δε ΣεµΣα≥ⁿ±  ταπ≡≤τΩΦ Γ±σ⌡ ΩαΣ≡εΓ:

    for (int i = 0; i < NUM_IMAGES; i++)
    {
      strImage = "images/cdimg0" +
       ((i < 10) ? "0" : "") + i + ".gif";
      m_Images[i] = getImage(
        getDocumentBase(), strImage);
      tracker.addImage(m_Images[i], 0);
    }

    ╟Σσ±ⁿ ∩≡σΣ∩εδαπασ≥± , ≈≥ε ⌠αΘδ√ Φτεß≡αµσφΦΘ φα⌡εΣ ≥±  Γ Ωα≥αδεπσ images, Ωε≥ε≡√Θ, Γ ±Γε■ ε≈σ≡σΣⁿ, ≡ατ∞σ∙σφ ≥α∞ µσ, πΣσ Φ ΣΓεΦ≈φ√Θ ⌠αΘδ α∩δσ≥α.

    ╚∞σφα ⌠αΘδεΓ, ±ε±≥αΓδ ■∙Φ⌡ ε≥Σσδⁿφ√σ ΩαΣ≡√, φα≈Φφα■≥±  ± ∩≡σ⌠ΦΩ±α cdimg0, Γ±δσΣ τα Ωε≥ε≡√∞ ΦΣσ≥ φε∞σ≡ ΩαΣ≡α (00, 01, 02, Φ ≥αΩ Σαδσσ), Φ ≡α±°Φ≡σφΦσ Φ∞σφΦ .gif.

    ╬µΦΣαφΦσ ταπ≡≤τΩΦ ΩαΣ≡εΓ Γ√∩εδφ σ≥±  ± ∩ε∞ε∙ⁿ■ ∞σ≥εΣα waitForAll, ε Ωε≥ε≡ε∞ ∞√ Γα∞ ≤µσ ≡α±±Ωατ√ΓαδΦ:

    try
    {
      tracker.waitForAll();
      m_fAllLoaded = !tracker.isErrorAny();
    }
    catch (InterruptedException e)
    {
    }

    ╧ε±δσ εΩεφ≈αφΦ  εµΦΣαφΦ  ⌠δαπ ταΓσ≡°σφΦ  ταπ≡≤τΩΦ ≤±≥αφαΓδΦΓασ≥±  ≥εδⁿΩε Γ ≥ε∞ ±δ≤≈ασ, σ±δΦ ∞σ≥εΣ isErrorAny Γσ≡φ≤δ τφα≈σφΦσ false, ≥ε σ±≥ⁿ σ±δΦ φσ ß√δε φΦΩαΩΦ⌡ ε°ΦßεΩ.

    ┼±δΦ µσ ∩≡εΦτε°δα ε°ΦßΩα, Γ εΩφσ α∩δσ≥α ε≥εß≡αµασ≥±  ±εε≥Γσ≥±≥Γ≤■∙σσ ±εεß∙σφΦσ, ∩ε±δσ ≈σπε ≡αßε≥α ∞σ≥εΣα run (Φ, ±δσΣεΓα≥σδⁿφε, ≡αßε≥α ±ετΣαφφεπε Σδ  φσπε ∩ε≥εΩα) ταΩαφ≈ΦΓασ≥± :

    if(!m_fAllLoaded)
    {
      stop();
      m_Graphics.drawString(
        "Load error",
        10, size().height / 2);
      return;
    }

    ┬ ±δ≤≈ασ ≤Σα≈φεΘ ταπ≡≤τΩΦ Γ±σ⌡ ΩαΣ≡εΓ ∞σ≥εΣ run ∩εδ≤≈ασ≥ °Φ≡Φφ≤ Φ Γ√±ε≥≤ ∩σ≡Γεπε ΩαΣ≡α ΓΦΣσε⌠Φδⁿ∞α Φ ±ε⌡≡αφ σ≥ ²≥Φ τφα≈σφΦ  Γ ∩σ≡σ∞σφφ√⌡ m_nImgWidth Φ m_nImgHeight:

    m_nImgWidth  = 
      m_Images[0].getWidth(this);
    m_nImgHeight = 
      m_Images[0].getHeight(this);

    ─αδσσ εΩφε α∩δσ≥α ∩σ≡σ≡Φ±εΓ√Γασ≥± :

    repaint();

    ╧≡Φ ²≥ε∞ ∞σ≥εΣ paint ε≥εß≡αµασ≥ Γ εΩφσ α∩δσ≥α ∩σ≡Γ√Θ ΩαΣ≡ ΓΦΣσε⌠Φδⁿ∞α.

    ═α ±δσΣ≤■∙σ∞ ²≥α∩σ ≡αßε≥√ ∞σ≥εΣα run τα∩≤±Ωασ≥±  ÷ΦΩδ ε≥εß≡αµσφΦ  ΩαΣ≡εΓ ⌠Φδⁿ∞α:

    while (true)
    {
      try
      {
        displayImage(m_Graphics);
        m_nCurrImage++;
        if(m_nCurrImage == NUM_IMAGES)
          m_nCurrImage = 0;
        Thread.sleep(30);
      }
      catch (InterruptedException e)
      {
        stop();
      }  
    }

    ┬ ²≥ε∞ ßσ±Ωεφσ≈φε∞ ÷ΦΩδσ Γ√τ√Γασ≥±  ∞σ≥εΣ displayImage, ≡Φ±≤■∙ΦΘ ≥σΩ≤∙ΦΘ ΩαΣ≡ ΓΦΣσε⌠Φδⁿ∞α, ∩ε±δσ ≈σπε φε∞σ≡ ≥σΩ≤∙σπε ΩαΣ≡α ≤ΓσδΦ≈ΦΓασ≥±  φα σΣΦφΦ÷≤. ┼±δΦ ∩εΩαταφ√ Γ±σ ΩαΣ≡√, φε∞σ≡ ≥σΩ≤∙σπε ΩαΣ≡α ±≥αφεΓΦ≥±  ≡αΓφ√∞ φ≤δ■, α τα≥σ∞ ∩≡ε÷σ±± ∩≡εΣεδµασ≥± .

    ╠σµΣ≤ ε≥εß≡αµσφΦσ∞ ΩαΣ≡εΓ Γ√∩εδφ σ≥±  ταΣσ≡µΩα ΓσδΦ≈ΦφεΘ 30 ∞ΦδδΦ±σΩ≤φΣ.

    ╠σ≥εΣ displayImage

    ╠σ≥εΣ displayImage Γ√τ√Γασ≥±  Φτ ΣΓ≤⌡ ∞σ±≥ - Φτ ∞σ≥εΣα paint ∩≡Φ ∩σ≡σ≡Φ±εΓΩσ εΩφα α∩δσ≥α Φ Φτ ∞σ≥εΣα run (∩σ≡ΦεΣΦ≈σ±ΩΦ).

    ┼±δΦ ΩαΣ≡√ ΓΦΣσε⌠Φδⁿ∞α φσ ταπ≡≤µσφ√, ±εΣσ≡µΦ∞εσ ⌠δαπα m_fAllLoaded ≡αΓφε false Φ ∞σ≥εΣ displayImage ∩≡ε±≥ε ΓετΓ≡α∙ασ≥ ≤∩≡αΓδσφΦσ, φΦ≈σπε φσ Σσδα :

    if(!m_fAllLoaded)
      return;

    ┼±δΦ µσ ταπ≡≤τΩα Φτεß≡αµσφΦΘ ταΓσ≡°σφα, ²≥ε≥ ∞σ≥εΣ ≡Φ±≤σ≥ Γ ÷σφ≥≡σ εΩφα ≥σΩ≤∙ΦΘ ΩαΣ≡ ΓΦΣσε⌠Φδⁿ∞α, Γ√τ√Γα  Σδ  ²≥επε τφαΩε∞√Θ Γα∞ ∞σ≥εΣ drawImage:

    g.drawImage(m_Images[m_nCurrImage],
      (size().width - m_nImgWidth)   / 2,
      (size().height - m_nImgHeight) / 2,
       null);

    ╧ε±δσ ≥επε ΩαΩ ΩαΣ≡ φα≡Φ±εΓαφ, ∞√ φαΣ∩Φ±√Γασ∞ φα φσ∞ σπε ∩ε≡ ΣΩεΓ√Θ φε∞σ≡, Γ√τ√Γα  Σδ  ²≥επε ∞σ≥εΣ drawString:

    g.drawString((new Integer(
      m_nCurrImage)).toString(),
      (size().width - m_nImgWidth)   / 2,
      ((size().height - m_nImgHeight) / 2) + 10);


Java | ╧≡εΣ≤Ω≥√ Φ ≡σ°σφΦ  | ╥σ⌡φεδεπΦΦ | ╤σ≡ΓΦ± Φ εß≤≈σφΦσ
╬ Ωε∞∩αφΦΦ | ╧α≡≥φσ≡√ | ═εΓε±≥Φ | ╧εΦ±Ω
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content